#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName  :processesThreads.py
# @Time      :2021/5/17 8:08
# @Author    :Letquit
"""
文件说明：进程和线程

"""
# 单核CPU是怎么执行多任务
# 操作系统轮流让各个任务交替执行，任务1执行0.01秒，切换到任务2，任务2执行0.01秒，再切换到任务3，执行0.01秒……
# 这样反复执行下去。表面上看，每个任务都是交替执行的，但是，由于CPU的执行速度实在是太快了，
# 我们感觉就像所有任务都在同时执行一样。
# 真正的并行执行多任务只能在多核CPU上实现，但是，由于任务数量远远多于CPU的核心数量，
# 所以，操作系统也会自动把很多任务轮流调度到每个核心上执行。

# 对于操作系统来说，一个任务就是一个进程（Process）
# 在一个进程内部，要同时干多件事，就需要同时运行多个“子任务”，我们把进程内的这些“子任务”称为线程（Thread）。
# 由于每个进程至少要干一件事，所以，一个进程至少有一个线程
# 当然，像Word这种复杂的进程可以有多个线程，多个线程可以同时执行，多线程的执行方式和多进程是一样的，
# 也是由操作系统在多个线程之间快速切换，让每个线程都短暂地交替运行，看起来就像同时执行一样。
# 当然，真正地同时执行多线程需要多核CPU才可能实现。

# 我们前面编写的所有的Python程序，都是执行单任务的进程，也就是只有一个线程
# 如果我们要同时执行多个任务怎么办
# 有两种解决方案：
# 一种是启动多个进程，每个进程虽然只有一个线程，但多个进程可以一块执行多个任务。
# 还有一种方法是启动一个进程，在一个进程内启动多个线程，这样，多个线程也可以一块执行多个任务。
# 当然还有第三种方法，就是启动多个进程，每个进程再启动多个线程，这样同时执行的任务就更多了，当然这种模型更复杂，实际很少采用。

# 总结一下就是，多任务的实现有3种方式：
# ·多进程模式；
# ·多线程模式；
# ·多进程+多线程模式。
# 同时执行多个任务通常各个任务之间并不是没有关联的，而是需要相互通信和协调，
# 有时，任务1必须暂停等待任务2完成后才能继续执行，有时，任务3和任务4又不能同时执行，
# 所以，多进程和多线程的程序的复杂度要远远高于我们前面写的单进程单线程的程序。
# 因为复杂度高，调试困难，所以，不是迫不得已，我们也不想编写多任务

# 小结
# 线程是最小的执行单元，而进程由至少一个线程组成。
# 如何调度进程和线程，完全由操作系统决定，程序自己不能决定什么时候执行，执行多长时间。
# 多进程和多线程的程序涉及到同步、数据共享的问题，编写起来更复杂。










































if __name__ == "__main__":
    run_code = 0
